home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / raid / raid1.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  2KB  |  99 lines

  1. #ifndef _RAID1_H
  2. #define _RAID1_H
  3.  
  4. #include <linux/raid/md.h>
  5.  
  6. typedef struct mirror_info mirror_info_t;
  7.  
  8. struct mirror_info {
  9.     mdk_rdev_t    *rdev;
  10.     sector_t    head_position;
  11. };
  12.  
  13. /*
  14.  * memory pools need a pointer to the mddev, so they can force an unplug
  15.  * when memory is tight, and a count of the number of drives that the
  16.  * pool was allocated for, so they know how much to allocate and free.
  17.  * mddev->raid_disks cannot be used, as it can change while a pool is active
  18.  * These two datums are stored in a kmalloced struct.
  19.  */
  20.  
  21. struct pool_info {
  22.     mddev_t *mddev;
  23.     int    raid_disks;
  24. };
  25.  
  26.  
  27. typedef struct r1bio_s r1bio_t;
  28.  
  29. struct r1_private_data_s {
  30.     mddev_t            *mddev;
  31.     mirror_info_t        *mirrors;
  32.     int            raid_disks;
  33.     int            working_disks;
  34.     int            last_used;
  35.     sector_t        next_seq_sect;
  36.     spinlock_t        device_lock;
  37.  
  38.     struct list_head    retry_list;
  39.     /* for use when syncing mirrors: */
  40.  
  41.     spinlock_t        resync_lock;
  42.     int nr_pending;
  43.     int barrier;
  44.     sector_t        next_resync;
  45.  
  46.     wait_queue_head_t    wait_idle;
  47.     wait_queue_head_t    wait_resume;
  48.  
  49.     struct pool_info    *poolinfo;
  50.  
  51.     mempool_t *r1bio_pool;
  52.     mempool_t *r1buf_pool;
  53. };
  54.  
  55. typedef struct r1_private_data_s conf_t;
  56.  
  57. /*
  58.  * this is the only point in the RAID code where we violate
  59.  * C type safety. mddev->private is an 'opaque' pointer.
  60.  */
  61. #define mddev_to_conf(mddev) ((conf_t *) mddev->private)
  62.  
  63. /*
  64.  * this is our 'private' RAID1 bio.
  65.  *
  66.  * it contains information about what kind of IO operations were started
  67.  * for this RAID1 operation, and about their status:
  68.  */
  69.  
  70. struct r1bio_s {
  71.     atomic_t        remaining; /* 'have we finished' count,
  72.                         * used from IRQ handlers
  73.                         */
  74.     sector_t        sector;
  75.     int            sectors;
  76.     unsigned long        state;
  77.     mddev_t            *mddev;
  78.     /*
  79.      * original bio going to /dev/mdx
  80.      */
  81.     struct bio        *master_bio;
  82.     /*
  83.      * if the IO is in READ direction, then this is where we read
  84.      */
  85.     int            read_disk;
  86.  
  87.     struct list_head    retry_list;
  88.     /*
  89.      * if the IO is in WRITE direction, then multiple bios are used.
  90.      * We choose the number when they are allocated.
  91.      */
  92.     struct bio        *bios[0];
  93. };
  94.  
  95. /* bits for r1bio.state */
  96. #define    R1BIO_Uptodate    0
  97. #define    R1BIO_IsSync    1
  98. #endif
  99.